﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Sistema_Totem.Clases;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Clases.Fabricas;
using Sistema_Totem.Logica.Fabricas;
using Sistema_Totem.Logica.Comandos.ComandoPropuesta;
using System.Xml;



namespace Sistema_Totem.Pruebas
{
    [TestFixture]
    public class PruebaPropuesta
    {


        #region Atributos

        private Entidad _propuesta;
        private Comando<Entidad> _comandoConsultar;
        private Comando<bool> _comandoBool;
        private string xml = "<root></root>";
        private string xml2 = "<root><prueba></prueba></root>";
        private XmlDocument doc = new XmlDocument();
        
        #endregion Atributos

        #region Prueba Instancia Propuesta

        /// <summary>
        /// Prueba para verificar que la fabrica entidades retorne una instancia correcta
        /// </summary>

        [Test]
        public void PruebaInstanciaPropuesta()
        {
            _propuesta = (Propuesta)FabricaEntidad.NuevaPropuesta();
            Assert.IsInstanceOf(typeof(Propuesta), _propuesta);
        }

        #endregion Prueba Instancia Propuesta

        #region Prueba Instancia Comando Nueva Propuesta

        /// <summary>
        /// Prueba para verificar si la instancia realizada por fabrica 
        /// de comandos retorna un comando correcto para agregar una nueva propuesta
        /// </summary>

        [Test]
        public void PruebaInstanciaComandoNuevaPropuesta()
        {

            _comandoBool = FabricaComando.CrearComandoAgregarPropuesta(_propuesta, 1);
            Assert.IsInstanceOf(typeof(Comando<bool>), _comandoBool);
        }

        #endregion Prueba Instancia Comando Nueva Propuesta

        #region Prueba Instancia Comando Consultar Propuesta

        /// <summary>
        /// Prueba para comprobar que la instancia realizada retorna
        /// un comando correcto para consultar propuesta.
        /// </summary>

        [Test]
        public void PruebaInstanciaComandoConsultarPropuesta()
        {
            _comandoConsultar = FabricaComando.CrearComandoConsultarPropuesta(1);
            Assert.IsInstanceOf(typeof(Comando<Entidad>), _comandoConsultar);
        }

        #endregion Prueba Instancia Comando Consultar Propuesta

        #region Prueba Instancia Comando Modificar Propuesta

        /// <summary>
        /// Prueba para comprobar que la instancia realizada retorna
        /// un comando correcto para modificar propuesta.
        /// </summary>

        [Test]
        public void PruebaInstanciaComandoModificarPropuesta()
        {
            _comandoBool = FabricaComando.CrearComandoModificarPropuesta(_propuesta, 1);
            Assert.IsInstanceOf(typeof(Comando<bool>), _comandoBool);
        }

        #endregion Prueba Instancia Comando Modificar Propuesta

        #region Prueba Agregar Propuesta
        [Test]
        public void PruebaAgregarPropuesta()
        {
            _propuesta = FabricaEntidad.NuevaPropuesta();
            doc.LoadXml(xml);
            (_propuesta as Propuesta).Contenido = doc;
            _comandoBool = FabricaComando.CrearComandoAgregarPropuesta(_propuesta as Entidad, 4);
            Assert.IsTrue(_comandoBool.Ejecutar());
        }
        #endregion Prueba Agregar Propuesta

        #region Prueba Modificar Propuesta
        [Test]
        public void PruebaModificarPropuesta()
        {
            _propuesta = FabricaEntidad.NuevaPropuesta();
            doc.LoadXml(xml2);
            (_propuesta as Propuesta).Contenido = doc;
            _comandoBool = FabricaComando.CrearComandoModificarPropuesta(_propuesta as Entidad, 4);
            Assert.IsTrue(_comandoBool.Ejecutar());
        }
        #endregion Prueba Modificar Propuesta

        #region Prueba Eliminar Propuesta
        [Test]
        public void PruebaEliminarPropuesta()
        {
            _comandoBool = FabricaComando.CrearComandoEliminarPropuesta(4);
            Assert.IsTrue(_comandoBool.Ejecutar());
        }
        #endregion Prueba Eliminar Propuesta

    }
}